/**
 * 题目描述:给定不同面额的硬币 coins 和一个总金额 amount。
 * 编写一个函数来计算可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额，返回 -1
 * @param {*} coins 
 * @param {*} num 
 */
var coinChange = function(coins, num) {
  let dp = [];
  dp[0] = 0;
  dp[1] = coins.indexOf(1) != -1 ? 1 : 0;
  if(num < 2) {
    return dp[1];
  }
  for (let i = 2; i <= num; i++) {
    // 当前面额存在
    let exist = coins.indexOf(i) !== -1;
    if(exist) {
      dp[i] = 1;
    } else {
      let all = [];
      for (let j = 1; j < i; j++) {
        let dif = i - j;
        all.push(dp[dif] ? dp[j] + dp[dif] : null)
      }
      console.log(i, all);
      dp[i] = Math.min.apply(null, all);
    }
  }
  console.log(dp)
  console.log(dp[num])
}

coinChange([2], 3)